package cn.itcast.transaction;

import org.apache.rocketmq.client.producer.*;
import org.apache.rocketmq.common.message.Message;
import org.apache.rocketmq.common.message.MessageExt;

// 生产者
public class Producer {
    public static void main(String[] args) throws Exception {
        // 1. 谁来发?
        // 事务消息生产者
        TransactionMQProducer producer = new TransactionMQProducer("group1");
        //DefaultMQProducer producer = new DefaultMQProducer("group1");

        // 2. 发给谁?
        producer.setNamesrvAddr("127.0.0.1:9876");

        // 设置事务的监听
        producer.setTransactionListener(new TransactionListener() {
            // 正常事务过程
            @Override
            public LocalTransactionState executeLocalTransaction(Message message, Object o) {
                System.out.println("正常事务过程");
                // 本地事务有没有执行成功
                // 返回状态
                //return LocalTransactionState.COMMIT_MESSAGE;
                // 回滚 本地数据库崩溃
                //return LocalTransactionState.ROLLBACK_MESSAGE;
                // 未知状态 等待补偿
                return LocalTransactionState.UNKNOW;
            }

            // 事务补偿过程
            @Override
            public LocalTransactionState checkLocalTransaction(MessageExt messageExt) {
                System.out.println("事务补偿过程");
                // 本地事务有没有执行成功
                // 返回状态
                // 如果补偿过程当中还是 UNKNOW 寻求运维人员手动介入
                return LocalTransactionState.COMMIT_MESSAGE;
            }
        });
        producer.start();

        // 3. 怎么发？
        // 4. 发什么?
        Message message = new Message("topic1", "hello world Transaction".getBytes());
        SendResult send = producer.sendMessageInTransaction(message,null);

        // 5. 发的结果是什么？
        System.out.println(send);

        // 6. 打扫战场？
        //producer.shutdown();
    }
}